#
#    Pixel War (Cliente) - Cliente de Juego Multiplayer Online
#    Copyright (C) 2010 - Francisco Rivera
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

import pygame
from constantes import *
from gutil import initializeDisplay
from OpenGL.GL import *
#from OpenGL.GLU import *
from criaturas import HandlerCriaturas
from bala import HandlerBalas
from ogl_entidades import TextBox, Boton
from score import Score
from juego import Juego

class Pantalla:
    
    def __init__(self):
        initializeDisplay(P_X, P_Y)
        self.clock = pygame.time.Clock()
        self.activado = False
        
    def setMapa(self, mapa):
        self.mapa = mapa
            
    def setPrincipal(self, jugador):
        self.principal = jugador
        
    def activar(self):
        self.dibujar = Dibujar(self.mapa, self.principal)
        self.activado = True

    def update(self):
        if self.activado:
            self.dibujar.dibJuego()
        # mostramos todo
        pygame.event.pump()
        pygame.display.flip()
        self.clock.tick(FPS_MAX)
        # FPS
        pygame.display.set_caption("Pixel War - FPS: %d" % self.clock.get_fps())
        
    def salir(self):
        pygame.quit()


class Dibujar:
    
    ''' Clase que se encarga de dibujar el juego '''   
    
    def __init__(self, mapa, jugador):
        self.mapa = mapa
        self.principal = jugador
        self.hcriat = HandlerCriaturas()
        self.balas = HandlerBalas()
        self.score = Score()
        self.surf = None
        
    def limpiar(self):
        glClearColor(0.0, 0.0, 0.0, 1.0)
        glClear(GL_COLOR_BUFFER_BIT)

    def dibJuego(self):            
        self.limpiar()
        self.dibMapa()
        for j in self.hcriat.getJugadores():
            self.dibSprite(j)
        for b in self.balas.getBalas():
            self.dibBalas(b)
        self.dibScore()
        
    def dibMapa(self):
        if self.surf:
            x = (CONST_CENTRAR - self.principal.x) * SQM
            y = (CONST_CENTRAR - self.principal.y) * -SQM
            self.surf.draw((x,y))
        else:
            self.surf = self.mapa.get_surf()
        
    def dibScore(self):
        i = 1
        # dibuja
        for s in self.score.get():
            s.draw(pos=(P_X - s.width, P_Y - 30*i))
            i += 1
        
    def dibSprite(self, criatura):
        if criatura.estaVivo():
            # calculamos las coordenadas
            x, y = self.coorObjetoCentradas(criatura)
            # color de equipo
            if criatura.getEquipo() == "r":
                color = list(C_JUG_R)
            else:
                color = list(C_JUG_A)
            # dibujamos los rects
            # color_t = color + [criatura.vida.get() * 255 / 100]
            ## esto es para posicionarse
            glLoadIdentity()
            glTranslate(x, y, 0)
            ##
            glColor4f(float(color[0])/255, float(color[1])/255, float(color[2])/255, (criatura.vida.get() * 255 / 100)/255)
            glBegin(GL_POLYGON)
            glVertex2i(0, 0)
            glVertex2i(0, -SQM)
            glVertex2i(SQM, -SQM)
            glVertex2i(SQM, 0)
            glEnd()
                   
    def dibBalas(self, bala):
        x, y = self.coorObjetoCentradas(bala)
        ## esto es para posicionarse
        glLoadIdentity()
        glTranslate(x, y, 0)
        ##
        glColor4f(0.0, 0.0, 0.0, 1.0)
        glBegin(GL_POLYGON)
        glVertex2i(0, 0)
        glVertex2i(0, -SQM)
        glVertex2i(SQM, -SQM)
        glVertex2i(SQM, 0)
        glEnd()        
            
    def coorObjetoCentradas(self, criat):
        x = (CONST_CENTRAR + criat.x - self.principal.x) * SQM
        y = (CONST_CENTRAR + self.principal.y - criat.y) * SQM
        return x, y               


class Login:

    def __init__(self, ip=None, equipo=None):
        if ip and equipo:
            self.conectar(ip, equipo)
        else:
            initializeDisplay(P_X, P_Y)
            self.clock = pygame.time.Clock()
            self.tb = TextBox()
            self.btn_rojo = Boton("rojo", C_JUG_R, 42.5, 150)
            self.btn_azul = Boton("azul", C_JUG_A, 242.5, 150)        
            pygame.display.set_caption("Pixel War - Login")
            conectar = False
            while True:                
                # updates
                pygame.event.pump()            
                self.tb.update()
                if self.btn_rojo.update():
                    conectar = "r"
                    break
                if self.btn_azul.update():
                    conectar = "a"
                    break
                    
                # dibujamos                     
                self.tb.dibujar()
                #self.btn_rojo.dibujar()
                #self.btn_azul.dibujar()
                
                # handlers
                tecla = pygame.key.get_pressed()
                if tecla[pygame.K_ESCAPE]:
                    break
                pygame.display.flip()
                pygame.display.set_caption("Pixel War - FPS: %d" % self.clock.get_fps())
                self.clock.tick(FPS_MAX)
                
            if conectar:
                self.conectar(self.tb.get(), conectar)
        
    def conectar(self, ip, equipo):
        Juego(self, ip, equipo, Pantalla())
        
    def error_conexion(self):
        print "bleble"
